import 'package:extended_image/extended_image.dart';
import 'package:flutter/painting.dart' show PaintingBinding; // 内存图片缓存

/// 缓存清理服务（仅针对 ExtendedImage.network 加载的网络图片）
/// 
/// 中文说明：
/// - 提供清理“全部缓存”和“按 URL 清理”的方法
/// - 同时覆盖内存缓存与磁盘缓存两类
class CacheService {
  CacheService._();

  /// 清空全部图片缓存（内存 + 磁盘）
  /// 注意：此操作会删除所有通过 ExtendedImage.network 缓存的图片文件
  static Future<void> clearAllImageCache() async {
    // 1) 清理内存缓存（Flutter 全局 ImageCache + ExtendedImage 内存缓存）
    clearMemoryImageCache();
    PaintingBinding.instance.imageCache.clear();

    // 2) 清理磁盘缓存（ExtendedImage 磁盘缓存：全部）
    await clearDiskCachedImages();
  }

  /// 仅清理内存缓存（全局）
  static void clearAllMemoryImageCache() {
    clearMemoryImageCache();
    PaintingBinding.instance.imageCache.clear();
  }

  /// 仅清理磁盘缓存（全部）
  static Future<void> clearAllDiskImageCache() async {
    await clearDiskCachedImages();
  }

  /// 按 URL 清理单张图片的缓存（内存 + 磁盘）
  /// 如果在加载时使用了自定义 cacheKey，请一并传入以保证逐出内存时命中同一键。
  static Future<void> clearImageCacheByUrl(String url, {String? cacheKey}) async {
    // 1) 先清理磁盘该 URL 的缓存文件
    await clearDiskCachedImage(url);

    // 2) 再从内存逐出该图片（两种方式保证命中）
    final provider = ExtendedNetworkImageProvider(
      url,
      cache: true,
      cacheKey: cacheKey,
    );
    provider.evict();
    PaintingBinding.instance.imageCache.evict(provider);
  }
}
